#pragma once
#include "base/noncopyable.h"
#include <deque>
#include <tuple>
namespace net_tools::base{
class Base_buffer;
} // namespace net_tools::base

namespace net_tools::net{
class Buffer;
class Buffer_reader : public net_tools::base::noncopyable{
friend class Buffer;
 public:
  Buffer_reader();
  // 似乎无拷贝的访问会更慢点 相对与直接memcpy到一个连续的内存区内而言
  // 每次定位都需要判断是否会越界 是否需要拼接 如果只支持单个字节的访问
  // 那效率会比拷贝来的更快 但是cache的影响下 内存搬移并不慢 除非在非常大的
  // 内存中 不需要访问 而是转发的话 那无拷贝有着天然的优势
  // 待完成的实现
  char* operator[](unsigned int index);
 private:
  ~Buffer_reader() = default;
  // 修改当前所有buffer的read_index 并换区
  void Read_all();
  void Init(Buffer* cur_buffer);
  Buffer* cur_buffer_;
  unsigned int len_;
  std::deque<std::tuple<net_tools::base::Base_buffer*,unsigned int>> buffer_deque_;
};

} // namespace net_tools::base